package d1_stream;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class StreamTest01 {
    public static void main(String[] args) {
        //目标: 认识Stream流的使用
        List<String> list = new ArrayList<>();
        list.add("陈平安");
        list.add("宁姚");
        list.add("叶凡");
        list.add("陈十三");
        list.add("陈平");

        //利用集合的API完成这个需求
        //1、拿出姓陈的,且名字是三个字
        //创建一个集合,接受三个字的人
        List<String> list1 = new ArrayList<>();
        //遍历原始集合,获取每一个数据
        for (String name : list) {
            //进行判断,是否满足条件
            if (name.startsWith("陈") && name.length() == 3){
                //满足条件,添加到新集合中
                list1.add(name);
            }
        }
        //对集合进行输出
        System.out.println(list1);


        //拿集合调用stream()-->就是拿集合的Stream流 --> 集合的类型是什么, Stream流上面的泛型也是什么类型
        //filter(某个对象(是一个函数式接口)) ---> 是过滤的意思
        //s -> 代表取里面的所有数据
        //什么意思: 告诉底层,我要姓张 名字是三个字的, 它会过滤出来
        //一过滤完会产生一个新的stream流, 上面只有姓张 名字是三个字的(就是返回主调对象)这样子就可以继续进行链式编程
        //收集到List集合

        //2、利用Stream做
        //List<String> newList = list.stream().filter(name -> name.startsWith("陈") && name.length() == 3).collect(Collectors.toList());
        List<String> newList = list.stream().filter(name -> name.startsWith("陈") && name.length() == 3).collect(Collectors.toList());
        //对获取流上的集合进行输出
        System.out.println(newList);
    }
}
